/**
 * 防抖函数
 *
 * @param fn 需要防抖的函数
 * @param delay 防抖时间间隔，单位毫秒
 * @returns 返回防抖后的函数
 */
function debounce(fn, delay) {
  let timer = null; // 用于存储定时器ID
  return function (...args) {
    clearTimeout(timer); // 清除之前的定时器
    timer = setTimeout(() => {
      // 设置新的定时器
      fn.apply(this, args); // 延迟结束后执行原函数
    }, delay);
  };
}

function search(query) {
  console.log("正在搜索:", query);
}

const debouncedSearch = fd(search, 300);

// setInterval(() => {
//   debouncedSearch(1);
// }, 100);

debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);
debouncedSearch(1);

function fd(fn, delay) {
  let timer = null;
  return function (...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

/**
 * 节流函数
 *
 * @param {Function} fn 需要节流的函数
 * @param {number} delay 节流时间间隔，单位毫秒
 * @returns {Function} 节流后的函数
 */
function throttle(fn, delay) {
  let lastTime = 0;
  return function (...args) {
    const now = Date.now();
    if (now - lastTime >= delay) {
      fn.apply(this, args);
      lastTime = now;
    }
  };
}

function search1(query) {
  console.log("正在搜索1:", query);
}

// 创建节流版本（每300ms最多执行一次）
const throttledScroll = throttle(search1, 1000);

setInterval(() => {
  throttledScroll("1");
}, 100);

function jl(fn, delay) {
  let lastTime = 0;
  return function (...args) {
    const now = new Date();
    if (now - lastTime >= delay) {
      fn.apply(this, args);
      lastTime = now;
    }
  };
}


function jliu(fn,delay) {
  let lastTime= 0;
  return function (...args) {
    const now = new Date()
    if (now - lastTime >= delay) {
      fn.apply(this,args)
      lastTime = now
    }
  }
}